interface _CO_ {
    /**
     * 获取属性
     * @param obj 对象
     * @param key 属性键
     * @param undefinedable <true> false  => 当没有该属性定义时， 返回 DEFAULT ， DEFAULT 是一个特殊的定义值。
     * @returns 属性值
     * @description 当对象中没有定义该属性时，返回 DEFAULT。
     */
    getProperty(obj: object, key: PropertyKey, undefinedable: false): any;
    /**
     * 获取属性
     * @param obj 对象
     * @param key 属性键
     * @param undefinedable <true> true   => 当没有该属性定义时， 返回 undefined ， 这种情况无法区分究竟是没有定义该属性，还是有该属性定义，只是属性值是 undefined
     * @returns 属性值
     * @description 当对象中没有定义该属性时，返回 undefined。
     */
    getProperty(obj: object, key: PropertyKey, undefinedable?: true): any;
}
{
    Object.defineProperty(_CO_.prototype, 'getProperty', {
        writable: false,
        configurable: false,
        enumerable: false,
        value: function (obj: any, key: any, undefinedable: any) {
            const description = Object.getOwnPropertyDescriptor(obj, key);
            return description ? description.value : (undefinedable !== false ? description : DEFAULT);
        }
    });
}
